#ifndef __EnsUtilisateur
#define __EnsUtilisateur

#include "Utilisateur.h"

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <string.h>
#include <glib-2.0/glib.h>
#include <assert.h>

struct sEnsUtilisateur
{
    GList * Utilisateurs;
} ;
typedef struct sEnsUtilisateur EnsUtilisateur;


/** @brief Initialise la liste de l'ensemble des utilisateurs*/
void ensutInitialiser(EnsUtilisateur *pEnsUtilisateur);

/** @brief Ajoute un utilisateur à la liste EnsUtilisateur */
void ensutAjouter(EnsUtilisateur *pEnsUtilisateur, const Utilisateur* pUtilisateur);

/** @brief Recherche et supprime le contact ayant pour nom : Nom */
void ensutSupprimer(EnsUtilisateur *pEnsUtilisateur, const char * Nom);

/** @brief Recherche l'utilisateur ayant pour nom: Nom*/
Utilisateur* ensutRechercher(const EnsUtilisateur *pEnsUtilisateur, const char* Nom);

/** @brief Recherche l'utilisateur en ième position*/
Utilisateur *ensutGetUtilisateur(const EnsUtilisateur *pEnsUtilisateur, int i);

/** @brief renvoie le nombre d'utilisateurs de EnsUtilisateur */
int ensutTaille(const EnsUtilisateur *pEnsUtilisateur);

/** @brief Ajoute un utilisateur à la liste EnsUtilisateur en demandant à l'utilisateur de saisir les informations de l'utilisateur (mode texte) */
void ensutAjouter2(EnsUtilisateur *pEnsUtilisateur);

/** @brief Libère la liste EnsUtilisateur*/
void ensutLiberer(EnsUtilisateur *pEnsUtilisateur);

/** @brief Affiche EnsUtilisateur (mode texte) */
void ensutAfficher(const EnsUtilisateur* pEnsUtilisateur);

/** @brief Enregistre l'ensemble des utilisateur dans un fichier */
void ensutSauver(const EnsUtilisateur *pEnsUtilisateur, const char * nomfichier);

/** @brief Charge l'ensemble des utilisateur en mémoire */
void ensutCharger(EnsUtilisateur *pEnsUtilisateur, const char * nomfichier);

/** @brief Test le module EnsUtilisateur */
void testRegressionEnsut();

#endif
